io_apic->ioapic_addr = IOAPIC_BASE_ADDRESS;
offset += sizeof(*io_apic);
- lapic = (struct acpi_20_madt_lapic *)io_apic;
+ lapic = (struct acpi_20_madt_lapic *)(io_apic + 1);
for ( i = 0; i < get_vcpu_nr(); i++ )
{
memset(lapic, 0, sizeof(*lapic));
lapic->type = ACPI_PROCESSOR_LOCAL_APIC;
lapic->length = sizeof(*lapic);
- lapic->acpi_processor_id = i;
- lapic->apic_id = i;
+ lapic->acpi_processor_id = lapic->apic_id = i + 1;
lapic->flags = ACPI_LOCAL_APIC_ENABLED;
offset += sizeof(*lapic);
lapic++;
#define __HVMLOADER_CONFIG_H__
#define IOAPIC_BASE_ADDRESS 0xfec00000
-#define IOAPIC_ID 0xfe
+#define IOAPIC_ID 0x00
#define IOAPIC_VERSION 0x11
#define LAPIC_BASE_ADDRESS 0xfee00000
void fill_mp_proc_entry(struct mp_proc_entry *mppe, int vcpu_id)
{
mppe->type = ENTRY_TYPE_PROCESSOR;
- mppe->lapic_id = vcpu_id;
+ mppe->lapic_id = vcpu_id + 1;
mppe->lapic_version = 0x11;
mppe->cpu_flags = CPU_FLAG_ENABLED;
if ( vcpu_id == 0 )
if ( dest_mode == 0 )
{
/* Physical mode. */
- if ( (dest == 0xFF) || (dest == v->vcpu_id) )
+ if ( (dest == 0xFF) || (dest == VLAPIC_ID(target)) )
result = 1;
}
else
struct vcpu *v = vlapic_vcpu(vlapic);
int i;
- vlapic_set_reg(vlapic, APIC_ID, v->vcpu_id << 24);
+ vlapic_set_reg(vlapic, APIC_ID, (v->vcpu_id + 1) << 24);
vlapic_set_reg(vlapic, APIC_LVR, VLAPIC_VERSION);
for ( i = 0; i < 8; i++ )